//Font.c: Display Chinese word and ASCII code
//Code by luobing 2019-5-16 15:48:50
/**
 * 《UEFI编程实践》随书代码
 * 更多的UEFI探索，可以参考笔者的博客和专栏：
 * CSDN: https://blog.csdn.net/luobing4365
 * 知乎: https://www.zhihu.com/column/c_1233025362843209728
 * **/
//#include "Window.h"
#include "Graphic.h"
#include "Font.h"

/*================================================= Chinese words =========================================================*/
//===================UTF-8 汉字 字模 begin================================================
//UTF-8 数据
UINT8 _32_27[] = {
0, 162, };
UINT8 _39_27[] = {
0, 32, 255, 1, 197, 1, 0, 3, 255, 1, 197, 1, 0, 3, 255, 1, 197, 1, 0, 3, 197, 1, 153, 1, 0, 3, 197, 1, 153, 1, 0, 81, };
UINT8 _44_27[] = {
0, 97, 255, 1, 197, 1, 0, 2, 73, 1, 255, 1, 111, 1, 0, 2, 111, 1, 255, 1, 36, 1, 0, 2, 153, 1, 197, 1, 0, 3, 255, 1, 111, 1, 0, 17, };
UINT8 _65_27[] = {
0, 90, 197, 1, 255, 1, 153, 1, 0, 10, 73, 1, 255, 3, 0, 10, 153, 1, 255, 1, 153, 1, 255, 1, 73, 1, 0, 9, 255, 1, 197, 1, 36, 1, 255, 1, 153, 1, 0, 8, 73, 1, 255, 1, 111, 1, 0, 1, 197, 1, 255, 1, 36, 1, 0, 7, 197, 1, 255, 1, 36, 1, 0, 1, 111, 1, 255, 1, 111, 1, 0, 6, 36, 1, 255, 1, 153, 1, 0, 2, 36, 1, 255, 1, 197, 1, 0, 6, 111, 1, 255, 1, 73, 1, 0, 3, 153, 1, 255, 1, 36, 1, 0, 5, 255, 2, 0, 4, 73, 1, 255, 1, 153, 1, 0, 4, 73, 1, 255, 9, 0, 4, 153, 1, 255, 9, 73, 1, 0, 3, 255, 2, 0, 6, 111, 1, 255, 1, 197, 1, 0, 2, 111, 1, 255, 1, 153, 1, 0, 7, 255, 2, 36, 1, 0, 1, 197, 1, 255, 1, 73, 1, 0, 7, 153, 1, 255, 1, 111, 1, 73, 1, 255, 2, 0, 8, 73, 1, 255, 1, 197, 1, 0, 84, };
UINT8 _69_27[] = {
0, 68, 153, 1, 255, 7, 36, 1, 0, 2, 153, 1, 255, 7, 36, 1, 0, 2, 153, 1, 255, 1, 36, 1, 0, 8, 153, 1, 255, 1, 36, 1, 0, 8, 153, 1, 255, 1, 36, 1, 0, 8, 153, 1, 255, 1, 36, 1, 0, 8, 153, 1, 255, 6, 153, 1, 0, 3, 153, 1, 255, 6, 153, 1, 0, 3, 153, 1, 255, 1, 36, 1, 0, 8, 153, 1, 255, 1, 36, 1, 0, 8, 153, 1, 255, 1, 36, 1, 0, 8, 153, 1, 255, 1, 36, 1, 0, 8, 153, 1, 255, 1, 36, 1, 0, 8, 153, 1, 255, 7, 73, 1, 0, 2, 153, 1, 255, 7, 73, 1, 0, 66, };
UINT8 _70_27[] = {
0, 68, 153, 1, 255, 7, 36, 1, 0, 2, 153, 1, 255, 7, 36, 1, 0, 2, 153, 1, 255, 1, 73, 1, 0, 8, 153, 1, 255, 1, 73, 1, 0, 8, 153, 1, 255, 1, 73, 1, 0, 8, 153, 1, 255, 1, 73, 1, 0, 8, 153, 1, 255, 1, 73, 1, 0, 8, 153, 1, 255, 6, 153, 1, 0, 3, 153, 1, 255, 6, 153, 1, 0, 3, 153, 1, 255, 1, 73, 1, 0, 8, 153, 1, 255, 1, 73, 1, 0, 8, 153, 1, 255, 1, 73, 1, 0, 8, 153, 1, 255, 1, 73, 1, 0, 8, 153, 1, 255, 1, 73, 1, 0, 8, 153, 1, 255, 1, 73, 1, 0, 72, };
UINT8 _73_27[] = {
0, 38, 153, 1, 255, 1, 36, 1, 0, 3, 153, 1, 255, 1, 36, 1, 0, 3, 153, 1, 255, 1, 36, 1, 0, 3, 153, 1, 255, 1, 36, 1, 0, 3, 153, 1, 255, 1, 36, 1, 0, 3, 153, 1, 255, 1, 36, 1, 0, 3, 153, 1, 255, 1, 36, 1, 0, 3, 153, 1, 255, 1, 36, 1, 0, 3, 153, 1, 255, 1, 36, 1, 0, 3, 153, 1, 255, 1, 36, 1, 0, 3, 153, 1, 255, 1, 36, 1, 0, 3, 153, 1, 255, 1, 36, 1, 0, 3, 153, 1, 255, 1, 36, 1, 0, 3, 153, 1, 255, 1, 36, 1, 0, 3, 153, 1, 255, 1, 36, 1, 0, 37, };
UINT8 _85_27[] = {
0, 92, 197, 1, 255, 1, 0, 7, 111, 1, 255, 1, 111, 1, 0, 3, 197, 1, 255, 1, 0, 7, 111, 1, 255, 1, 111, 1, 0, 3, 197, 1, 255, 1, 0, 7, 111, 1, 255, 1, 111, 1, 0, 3, 197, 1, 255, 1, 0, 7, 111, 1, 255, 1, 111, 1, 0, 3, 197, 1, 255, 1, 0, 7, 111, 1, 255, 1, 111, 1, 0, 3, 197, 1, 255, 1, 0, 7, 111, 1, 255, 1, 111, 1, 0, 3, 197, 1, 255, 1, 0, 7, 111, 1, 255, 1, 111, 1, 0, 3, 197, 1, 255, 1, 0, 7, 111, 1, 255, 1, 111, 1, 0, 3, 197, 1, 255, 1, 0, 7, 111, 1, 255, 1, 111, 1, 0, 3, 197, 1, 255, 1, 0, 7, 111, 1, 255, 1, 111, 1, 0, 3, 197, 1, 255, 1, 73, 1, 0, 6, 153, 1, 255, 1, 73, 1, 0, 3, 153, 1, 255, 1, 153, 1, 0, 6, 255, 2, 36, 1, 0, 3, 36, 1, 255, 2, 153, 1, 0, 4, 255, 2, 153, 1, 0, 5, 111, 1, 255, 8, 0, 8, 255, 5, 111, 1, 0, 94, };
UINT8 _97_27[] = {
0, 113, 153, 1, 255, 4, 73, 1, 0, 4, 153, 1, 255, 6, 73, 1, 0, 3, 153, 1, 73, 1, 0, 3, 153, 1, 255, 1, 153, 1, 0, 9, 255, 1, 197, 1, 0, 5, 36, 1, 255, 4, 197, 1, 0, 3, 153, 1, 255, 6, 197, 1, 0, 2, 111, 1, 255, 1, 111, 1, 0, 4, 255, 1, 197, 1, 0, 2, 153, 1, 255, 1, 36, 1, 0, 3, 73, 1, 255, 1, 197, 1, 0, 2, 153, 1, 255, 1, 153, 1, 0, 2, 36, 1, 255, 2, 197, 1, 0, 2, 73, 1, 255, 5, 111, 1, 255, 1, 197, 1, 0, 3, 73, 1, 255, 3, 73, 1, 0, 1, 255, 1, 197, 1, 0, 67, };
UINT8 _101_27[] = {
0, 114, 255, 4, 111, 1, 0, 4, 73, 1, 255, 6, 153, 1, 0, 3, 255, 2, 73, 1, 0, 3, 255, 2, 36, 1, 0, 1, 111, 1, 255, 1, 73, 1, 0, 4, 73, 1, 255, 1, 111, 1, 0, 1, 153, 1, 255, 8, 153, 1, 0, 1, 153, 1, 255, 8, 153, 1, 0, 1, 153, 1, 255, 1, 73, 1, 0, 8, 111, 1, 255, 1, 111, 1, 0, 8, 36, 1, 255, 2, 111, 1, 0, 3, 73, 1, 197, 1, 0, 3, 111, 1, 255, 6, 197, 1, 0, 4, 36, 1, 255, 4, 153, 1, 0, 68, };
UINT8 _108_27[] = {
0, 27, 255, 1, 197, 1, 0, 3, 255, 1, 197, 1, 0, 3, 255, 1, 197, 1, 0, 3, 255, 1, 197, 1, 0, 3, 255, 1, 197, 1, 0, 3, 255, 1, 197, 1, 0, 3, 255, 1, 197, 1, 0, 3, 255, 1, 197, 1, 0, 3, 255, 1, 197, 1, 0, 3, 255, 1, 197, 1, 0, 3, 255, 1, 197, 1, 0, 3, 255, 1, 197, 1, 0, 3, 255, 1, 197, 1, 0, 3, 255, 1, 197, 1, 0, 3, 255, 1, 197, 1, 0, 3, 255, 1, 197, 1, 0, 31, };
UINT8 _114_27[] = {
0, 82, 197, 1, 255, 1, 36, 1, 111, 1, 255, 2, 0, 2, 197, 1, 255, 1, 111, 1, 255, 3, 0, 2, 197, 1, 255, 2, 73, 1, 0, 4, 197, 1, 255, 1, 111, 1, 0, 5, 197, 1, 255, 1, 36, 1, 0, 5, 197, 1, 255, 1, 36, 1, 0, 5, 197, 1, 255, 1, 36, 1, 0, 5, 197, 1, 255, 1, 36, 1, 0, 5, 197, 1, 255, 1, 36, 1, 0, 5, 197, 1, 255, 1, 36, 1, 0, 5, 197, 1, 255, 1, 36, 1, 0, 51, };
UINT8 _115_27[] = {
0, 93, 197, 1, 255, 3, 73, 1, 0, 2, 36, 1, 255, 6, 0, 2, 111, 1, 255, 1, 153, 1, 0, 3, 153, 1, 0, 2, 111, 1, 255, 1, 111, 1, 0, 6, 36, 1, 255, 3, 73, 1, 0, 6, 197, 1, 255, 3, 73, 1, 0, 6, 73, 1, 255, 2, 73, 1, 0, 6, 111, 1, 255, 1, 111, 1, 0, 1, 153, 1, 36, 1, 0, 3, 153, 1, 255, 1, 111, 1, 0, 1, 153, 1, 255, 6, 0, 3, 197, 1, 255, 3, 153, 1, 0, 56, };
UINT8 _117_27[] = {
0, 121, 36, 1, 255, 1, 153, 1, 0, 4, 36, 1, 255, 1, 153, 1, 0, 2, 36, 1, 255, 1, 153, 1, 0, 4, 36, 1, 255, 1, 153, 1, 0, 2, 36, 1, 255, 1, 153, 1, 0, 4, 36, 1, 255, 1, 153, 1, 0, 2, 36, 1, 255, 1, 153, 1, 0, 4, 36, 1, 255, 1, 153, 1, 0, 2, 36, 1, 255, 1, 153, 1, 0, 4, 36, 1, 255, 1, 153, 1, 0, 2, 36, 1, 255, 1, 153, 1, 0, 4, 36, 1, 255, 1, 153, 1, 0, 2, 36, 1, 255, 1, 153, 1, 0, 4, 73, 1, 255, 1, 153, 1, 0, 2, 36, 1, 255, 2, 0, 4, 111, 1, 255, 1, 153, 1, 0, 3, 255, 2, 111, 1, 0, 2, 73, 1, 255, 2, 153, 1, 0, 3, 111, 1, 255, 5, 111, 1, 255, 1, 153, 1, 0, 4, 111, 1, 255, 3, 73, 1, 36, 1, 255, 1, 153, 1, 0, 73, };
UINT8 _14989462_27[] = {
0, 108, 36, 1, 255, 1, 73, 1, 0, 4, 111, 1, 255, 1, 0, 6, 111, 1, 255, 1, 0, 3, 36, 1, 255, 1, 73, 1, 0, 4, 111, 1, 255, 1, 0, 6, 111, 1, 255, 1, 0, 3, 36, 1, 255, 1, 73, 1, 0, 4, 111, 1, 255, 1, 0, 6, 111, 1, 255, 1, 0, 3, 36, 1, 255, 1, 73, 1, 0, 4, 111, 1, 255, 1, 0, 6, 111, 1, 255, 1, 0, 3, 36, 1, 255, 1, 73, 1, 0, 4, 111, 1, 255, 1, 0, 3, 36, 1, 255, 18, 197, 1, 0, 3, 111, 1, 255, 1, 0, 3, 36, 1, 255, 1, 73, 1, 0, 4, 111, 1, 255, 1, 0, 6, 111, 1, 255, 1, 0, 3, 36, 1, 255, 1, 73, 1, 0, 4, 111, 1, 255, 1, 0, 6, 111, 1, 255, 1, 0, 3, 36, 1, 255, 1, 73, 1, 0, 4, 111, 1, 255, 1, 0, 6, 111, 1, 255, 1, 0, 3, 36, 1, 255, 1, 73, 1, 0, 4, 111, 1, 255, 1, 0, 6, 111, 1, 255, 1, 0, 3, 36, 1, 255, 1, 73, 1, 0, 4, 111, 1, 255, 1, 0, 6, 111, 1, 255, 1, 0, 3, 36, 1, 255, 8, 0, 6, 111, 1, 255, 1, 0, 3, 36, 1, 255, 1, 73, 1, 0, 4, 111, 1, 255, 1, 0, 6, 111, 1, 255, 1, 0, 18, 111, 1, 255, 1, 0, 18, 111, 1, 255, 1, 0, 18, 111, 1, 255, 15, 73, 1, 0, 100, };
UINT8 _15041957_27[] = {
0, 106, 111, 1, 197, 1, 0, 18, 111, 1, 255, 1, 197, 1, 0, 18, 36, 1, 255, 1, 111, 1, 0, 18, 111, 1, 255, 1, 36, 1, 0, 18, 255, 1, 153, 1, 0, 17, 36, 1, 255, 2, 73, 1, 0, 16, 111, 1, 255, 1, 197, 2, 0, 16, 197, 2, 73, 1, 255, 1, 36, 1, 0, 14, 73, 1, 255, 1, 73, 1, 0, 1, 197, 1, 153, 1, 0, 14, 153, 1, 255, 1, 0, 2, 73, 1, 255, 1, 36, 1, 0, 12, 36, 1, 255, 1, 111, 1, 0, 3, 197, 1, 153, 1, 0, 12, 197, 1, 255, 1, 0, 4, 73, 1, 255, 1, 73, 1, 0, 10, 111, 1, 255, 1, 73, 1, 0, 5, 153, 1, 197, 1, 0, 9, 36, 1, 255, 1, 153, 1, 0, 7, 255, 1, 153, 1, 0, 7, 36, 1, 255, 1, 197, 1, 0, 8, 73, 1, 255, 1, 73, 1, 0, 5, 36, 1, 255, 1, 197, 1, 0, 10, 111, 1, 255, 1, 73, 1, 0, 3, 73, 1, 255, 1, 197, 1, 0, 12, 111, 1, 255, 1, 111, 1, 0, 1, 36, 1, 255, 1, 111, 1, 0, 14, 36, 1, 255, 1, 153, 1, 0, 80, };
UINT8 _15117474_27[] = {
0, 110, 111, 1, 255, 1, 36, 1, 0, 8, 197, 1, 255, 6, 0, 2, 197, 1, 153, 1, 0, 14, 111, 1, 255, 1, 0, 1, 36, 1, 255, 9, 153, 1, 0, 6, 153, 1, 197, 1, 0, 1, 111, 1, 197, 1, 0, 6, 73, 1, 255, 1, 111, 1, 0, 1, 111, 2, 0, 3, 197, 1, 153, 1, 0, 1, 255, 1, 111, 1, 0, 1, 73, 1, 255, 1, 36, 1, 0, 2, 153, 1, 255, 1, 0, 2, 111, 1, 255, 1, 36, 1, 0, 2, 255, 1, 111, 2, 255, 1, 36, 1, 0, 1, 73, 1, 255, 1, 36, 1, 0, 1, 36, 1, 255, 1, 111, 1, 0, 3, 153, 1, 255, 1, 0, 1, 36, 1, 255, 1, 73, 1, 197, 1, 153, 1, 0, 2, 73, 1, 255, 1, 36, 1, 0, 1, 111, 1, 255, 1, 0, 5, 255, 1, 153, 1, 73, 1, 255, 1, 36, 1, 0, 4, 111, 1, 255, 1, 36, 1, 0, 8, 73, 1, 255, 2, 197, 1, 0, 5, 111, 1, 255, 1, 73, 1, 0, 9, 153, 1, 255, 1, 111, 1, 0, 5, 153, 1, 255, 1, 153, 1, 0, 9, 111, 1, 255, 1, 153, 1, 0, 5, 255, 3, 0, 9, 255, 3, 73, 1, 0, 3, 73, 1, 255, 1, 73, 1, 255, 1, 73, 1, 0, 7, 111, 1, 255, 1, 36, 1, 197, 1, 255, 1, 0, 3, 153, 1, 255, 1, 0, 1, 153, 1, 197, 1, 0, 6, 36, 1, 255, 1, 111, 1, 0, 1, 36, 1, 255, 1, 153, 1, 0, 1, 73, 1, 255, 1, 73, 1, 0, 1, 36, 1, 255, 1, 73, 1, 0, 5, 197, 2, 0, 3, 153, 1, 111, 1, 36, 1, 255, 1, 153, 1, 0, 3, 111, 1, 255, 1, 36, 1, 0, 3, 153, 1, 255, 1, 0, 5, 36, 1, 255, 1, 197, 1, 0, 5, 197, 1, 255, 1, 0, 2, 36, 1, 255, 1, 36, 1, 0, 4, 73, 1, 255, 1, 153, 1, 0, 7, 255, 2, 0, 7, 73, 1, 255, 1, 73, 1, 0, 9, 197, 1, 255, 1, 0, 80, };
UINT8 _15177100_27[] = {
0, 122, 73, 1, 255, 15, 0, 4, 73, 1, 255, 1, 36, 1, 0, 4, 111, 1, 255, 1, 36, 1, 0, 4, 111, 1, 255, 1, 0, 4, 73, 1, 255, 1, 36, 1, 0, 4, 111, 1, 255, 1, 36, 1, 0, 4, 111, 1, 255, 1, 0, 4, 73, 1, 255, 15, 0, 4, 73, 1, 255, 1, 36, 1, 0, 4, 111, 1, 255, 1, 36, 1, 0, 4, 111, 1, 255, 1, 0, 4, 73, 1, 255, 1, 36, 1, 0, 4, 111, 1, 255, 1, 36, 1, 0, 4, 111, 1, 255, 1, 0, 4, 73, 1, 255, 15, 0, 4, 73, 1, 255, 1, 36, 1, 0, 2, 36, 1, 255, 1, 197, 1, 0, 1, 255, 1, 153, 1, 0, 3, 111, 1, 255, 1, 0, 8, 73, 1, 255, 1, 153, 1, 0, 3, 197, 1, 153, 1, 0, 11, 153, 1, 255, 1, 73, 1, 0, 5, 153, 1, 197, 1, 0, 8, 36, 1, 255, 1, 197, 2, 153, 1, 0, 5, 197, 2, 255, 1, 36, 1, 0, 5, 197, 1, 255, 1, 73, 1, 0, 1, 197, 1, 153, 1, 0, 5, 197, 1, 153, 1, 0, 1, 197, 1, 255, 1, 36, 1, 0, 1, 36, 1, 255, 1, 153, 1, 0, 3, 255, 1, 111, 1, 0, 5, 197, 1, 153, 1, 0, 3, 255, 2, 0, 5, 73, 1, 255, 1, 73, 1, 0, 5, 197, 1, 153, 1, 0, 10, 153, 1, 255, 1, 0, 6, 197, 1, 153, 1, 0, 9, 111, 1, 255, 1, 73, 1, 0, 6, 197, 1, 153, 1, 0, 8, 197, 1, 255, 1, 73, 1, 0, 7, 197, 1, 153, 1, 0, 7, 197, 1, 255, 1, 0, 9, 197, 1, 153, 1, 0, 65, };
UINT8 _15178372_27[] = {
0, 104, 197, 1, 255, 1, 0, 6, 197, 1, 255, 1, 0, 9, 111, 1, 255, 1, 36, 1, 0, 5, 36, 1, 255, 1, 73, 1, 0, 7, 111, 1, 255, 6, 197, 1, 0, 2, 111, 1, 255, 7, 73, 1, 0, 1, 111, 1, 255, 1, 0, 4, 153, 1, 197, 1, 0, 2, 255, 1, 36, 1, 0, 4, 111, 1, 255, 1, 36, 1, 0, 1, 111, 1, 255, 1, 0, 4, 153, 1, 197, 1, 0, 1, 153, 2, 0, 5, 111, 1, 255, 1, 36, 1, 0, 1, 111, 1, 255, 1, 0, 4, 153, 1, 197, 1, 36, 1, 255, 1, 73, 1, 0, 5, 111, 1, 255, 1, 36, 1, 0, 1, 111, 1, 255, 1, 0, 4, 153, 1, 197, 1, 111, 1, 197, 1, 111, 1, 73, 1, 0, 4, 111, 1, 255, 1, 36, 1, 0, 1, 111, 1, 255, 1, 0, 4, 153, 1, 197, 1, 0, 2, 197, 1, 255, 1, 0, 4, 111, 1, 255, 1, 36, 1, 0, 1, 111, 1, 255, 1, 0, 4, 153, 1, 197, 1, 0, 3, 255, 1, 153, 1, 0, 3, 111, 1, 255, 1, 0, 2, 111, 1, 255, 6, 197, 1, 0, 3, 111, 1, 255, 1, 36, 1, 0, 2, 111, 1, 255, 1, 0, 2, 111, 1, 255, 1, 0, 4, 153, 1, 197, 1, 0, 4, 197, 2, 0, 2, 111, 1, 255, 1, 0, 2, 111, 1, 255, 1, 0, 4, 153, 1, 197, 1, 0, 4, 73, 1, 255, 1, 73, 1, 0, 1, 111, 1, 255, 1, 0, 2, 111, 1, 255, 1, 0, 4, 153, 1, 197, 1, 0, 5, 197, 1, 36, 1, 0, 1, 153, 1, 197, 1, 0, 2, 111, 1, 255, 1, 0, 4, 153, 1, 197, 1, 0, 8, 153, 1, 197, 1, 0, 2, 111, 1, 255, 1, 0, 4, 153, 1, 197, 1, 0, 8, 153, 1, 197, 1, 0, 2, 111, 1, 255, 1, 0, 4, 153, 1, 197, 1, 0, 8, 197, 1, 153, 1, 0, 2, 111, 1, 255, 6, 197, 1, 0, 7, 73, 1, 255, 1, 111, 1, 0, 2, 111, 1, 255, 1, 0, 4, 153, 1, 197, 1, 0, 2, 36, 1, 255, 5, 153, 1, 0, 82, };
UINT8 _15253390_27[] = {
0, 101, 73, 1, 153, 1, 0, 6, 36, 1, 255, 2, 73, 1, 0, 8, 73, 1, 255, 1, 111, 1, 0, 3, 255, 3, 153, 1, 0, 1, 36, 1, 0, 9, 111, 1, 255, 1, 36, 1, 0, 2, 255, 1, 153, 1, 0, 3, 111, 1, 255, 6, 0, 4, 255, 1, 197, 1, 0, 2, 255, 1, 153, 1, 0, 3, 111, 1, 255, 1, 0, 3, 111, 1, 255, 1, 0, 4, 73, 1, 197, 1, 0, 2, 255, 1, 153, 1, 0, 3, 111, 1, 255, 1, 0, 3, 111, 1, 255, 1, 0, 8, 255, 1, 153, 1, 0, 3, 111, 1, 255, 1, 0, 3, 111, 1, 255, 1, 0, 8, 255, 1, 153, 1, 0, 3, 111, 1, 255, 1, 0, 3, 111, 1, 255, 1, 0, 1, 36, 1, 255, 3, 153, 1, 0, 2, 255, 1, 153, 1, 0, 3, 111, 1, 255, 1, 0, 3, 111, 1, 255, 1, 0, 4, 255, 1, 153, 1, 0, 2, 255, 1, 153, 1, 0, 3, 111, 1, 255, 1, 0, 3, 111, 1, 255, 1, 0, 4, 255, 1, 153, 1, 0, 2, 255, 1, 153, 1, 0, 3, 111, 1, 255, 1, 0, 3, 111, 1, 255, 1, 0, 4, 255, 1, 153, 1, 0, 2, 255, 1, 153, 1, 0, 1, 73, 1, 153, 1, 111, 1, 255, 1, 0, 3, 111, 1, 255, 1, 0, 4, 255, 1, 153, 1, 0, 2, 255, 4, 197, 1, 111, 1, 255, 1, 0, 3, 153, 1, 255, 1, 0, 4, 255, 1, 153, 1, 0, 1, 73, 1, 255, 2, 197, 1, 0, 2, 111, 1, 255, 1, 111, 1, 255, 3, 73, 1, 0, 4, 255, 1, 153, 1, 0, 2, 255, 1, 0, 4, 111, 1, 255, 1, 0, 8, 73, 1, 255, 1, 153, 1, 0, 7, 111, 1, 255, 1, 0, 7, 111, 1, 255, 1, 197, 1, 255, 1, 0, 7, 111, 1, 255, 1, 0, 6, 73, 1, 255, 1, 153, 1, 0, 1, 111, 1, 255, 1, 73, 1, 0, 14, 153, 1, 0, 4, 197, 1, 255, 12, 197, 1, 0, 80, };
UINT8 _15253403_27[] = {
0, 102, 255, 1, 0, 6, 197, 1, 153, 1, 0, 3, 73, 1, 255, 1, 36, 1, 0, 4, 36, 1, 255, 1, 153, 1, 0, 5, 197, 1, 153, 1, 0, 3, 73, 1, 255, 1, 36, 1, 0, 5, 73, 1, 255, 1, 73, 1, 0, 4, 197, 1, 153, 1, 0, 3, 73, 1, 255, 1, 36, 1, 0, 6, 153, 1, 255, 1, 0, 4, 197, 1, 153, 1, 0, 3, 73, 1, 255, 1, 36, 1, 0, 6, 36, 1, 197, 1, 36, 1, 73, 1, 255, 12, 0, 10, 197, 1, 153, 1, 0, 3, 73, 1, 255, 1, 36, 1, 0, 12, 197, 1, 153, 1, 0, 3, 73, 1, 255, 1, 36, 1, 0, 3, 36, 1, 255, 3, 153, 1, 0, 4, 197, 1, 153, 1, 0, 3, 73, 1, 255, 1, 36, 1, 0, 6, 255, 1, 153, 1, 0, 4, 197, 1, 153, 1, 0, 3, 73, 1, 255, 1, 36, 1, 0, 6, 255, 1, 153, 1, 0, 1, 255, 13, 197, 1, 0, 3, 255, 1, 153, 1, 0, 4, 197, 2, 0, 3, 73, 1, 255, 1, 36, 1, 0, 6, 255, 1, 153, 1, 0, 4, 255, 1, 111, 1, 0, 3, 73, 1, 255, 1, 36, 1, 0, 6, 255, 1, 153, 1, 0, 3, 111, 1, 255, 1, 36, 1, 0, 3, 73, 1, 255, 1, 36, 1, 0, 6, 255, 1, 153, 1, 0, 2, 36, 1, 255, 1, 197, 1, 0, 4, 73, 1, 255, 1, 36, 1, 0, 5, 36, 1, 255, 1, 153, 1, 0, 1, 36, 1, 255, 2, 36, 1, 0, 4, 73, 1, 255, 1, 36, 1, 0, 4, 73, 1, 255, 1, 197, 1, 255, 1, 36, 1, 73, 1, 197, 1, 36, 1, 0, 5, 73, 1, 255, 1, 36, 1, 0, 3, 73, 1, 255, 1, 153, 1, 0, 1, 111, 1, 255, 1, 153, 1, 0, 14, 153, 1, 0, 4, 255, 13, 197, 1, 0, 80, };
UINT8 _15711361_27[] = {
0, 124, 153, 1, 255, 1, 73, 1, 0, 17, 153, 1, 255, 1, 36, 1, 0, 17, 153, 1, 255, 1, 36, 1, 0, 17, 153, 1, 255, 1, 36, 1, 0, 17, 153, 1, 255, 1, 36, 1, 0, 17, 111, 1, 255, 1, 36, 1, 0, 17, 111, 1, 255, 1, 36, 1, 0, 17, 111, 1, 255, 1, 36, 1, 0, 17, 111, 1, 255, 1, 36, 1, 0, 17, 111, 1, 255, 1, 36, 1, 0, 17, 111, 1, 255, 1, 0, 58, 197, 1, 255, 1, 111, 1, 0, 17, 197, 1, 255, 1, 111, 1, 0, 133, };
LATTICE lattice_array[] = {
        {32, 6, _32_27},
        {39, 5, _39_27},
        {44, 5, _44_27},
        {65, 14, _65_27},
        {69, 11, _69_27},
        {70, 11, _70_27},
        {73, 6, _73_27},
        {85, 15, _85_27},
        {97, 11, _97_27},
        {101, 11, _101_27},
        {108, 5, _108_27},
        {114, 8, _114_27},
        {115, 9, _115_27},
        {117, 12, _117_27},
        {14989462, 20, _14989462_27},
        {15041957, 20, _15041957_27},
        {15117474, 20, _15117474_27},
        {15177100, 20, _15177100_27},
        {15178372, 20, _15178372_27},
        {15253390, 20, _15253390_27},
        {15253403, 20, _15253403_27},
        {15711361, 20, _15711361_27},
};
// extern FONT_INFO MyFontArray;
FONT_INFO MyFontArray ={
    27,
    22,
    lattice_array
};

UINT8 _39_20[] = {
0, 16, 111, 1, 73, 1, 0, 1, 111, 1, 73, 1, 0, 1, 111, 1, 73, 1, 0, 1, 111, 1, 73, 1, 0, 33, };
UINT8 _67_20[] = {
0, 54, 153, 1, 255, 3, 197, 1, 36, 1, 0, 2, 36, 1, 255, 1, 73, 1, 0, 3, 36, 2, 0, 2, 197, 1, 36, 1, 0, 7, 111, 1, 73, 1, 0, 8, 153, 1, 0, 9, 197, 1, 0, 9, 153, 1, 0, 9, 111, 1, 73, 1, 0, 8, 36, 1, 197, 1, 0, 9, 73, 1, 197, 1, 73, 1, 0, 3, 36, 2, 0, 3, 36, 1, 197, 1, 255, 3, 153, 1, 0, 41, };
UINT8 _69_20[] = {
0, 41, 36, 1, 255, 5, 0, 2, 36, 1, 111, 1, 0, 6, 36, 1, 111, 1, 0, 6, 36, 1, 111, 1, 0, 6, 36, 1, 111, 1, 0, 6, 36, 1, 255, 4, 153, 1, 0, 2, 36, 1, 111, 1, 0, 6, 36, 1, 111, 1, 0, 6, 36, 1, 111, 1, 0, 6, 36, 1, 111, 1, 0, 6, 36, 1, 255, 5, 73, 1, 0, 32, };
UINT8 _83_20[] = {
0, 42, 36, 1, 197, 1, 255, 2, 153, 1, 0, 2, 36, 1, 197, 1, 36, 1, 0, 2, 36, 1, 0, 2, 111, 1, 73, 1, 0, 6, 73, 1, 111, 1, 0, 7, 153, 1, 111, 1, 0, 7, 73, 1, 197, 1, 73, 1, 0, 7, 111, 1, 153, 1, 0, 7, 111, 1, 73, 1, 0, 6, 73, 2, 0, 1, 73, 1, 36, 1, 0, 2, 36, 1, 197, 1, 0, 2, 36, 1, 197, 1, 255, 2, 197, 1, 36, 1, 0, 33, };
UINT8 _15042490_20[] = {
0, 67, 153, 1, 36, 1, 0, 8, 153, 1, 0, 4, 153, 1, 36, 1, 0, 3, 111, 1, 73, 1, 0, 3, 153, 1, 0, 4, 153, 1, 36, 1, 0, 3, 111, 1, 73, 1, 0, 3, 153, 1, 0, 4, 153, 1, 36, 1, 0, 3, 111, 1, 73, 1, 0, 3, 153, 1, 0, 4, 153, 1, 36, 1, 0, 3, 111, 1, 73, 1, 0, 3, 153, 1, 197, 4, 255, 1, 197, 4, 255, 1, 73, 1, 0, 8, 153, 1, 36, 1, 0, 13, 153, 1, 36, 1, 0, 7, 36, 1, 153, 1, 0, 4, 153, 1, 36, 1, 0, 4, 197, 1, 0, 2, 36, 1, 153, 1, 0, 4, 153, 1, 36, 1, 0, 4, 197, 1, 0, 2, 36, 1, 153, 1, 0, 4, 153, 1, 36, 1, 0, 4, 197, 1, 0, 2, 36, 1, 153, 1, 0, 4, 153, 1, 36, 1, 0, 4, 197, 1, 0, 2, 36, 1, 255, 1, 197, 4, 255, 1, 197, 6, 0, 14, 197, 1, 0, 31, };
UINT8 _15109257_20[] = {
0, 62, 36, 1, 111, 1, 0, 5, 111, 1, 36, 1, 0, 6, 36, 1, 111, 1, 0, 5, 36, 1, 153, 1, 0, 6, 36, 1, 111, 1, 0, 2, 197, 4, 255, 1, 197, 3, 111, 1, 36, 1, 197, 2, 255, 1, 197, 1, 36, 1, 197, 1, 0, 6, 36, 1, 111, 1, 0, 2, 36, 1, 111, 1, 0, 2, 111, 1, 0, 1, 73, 1, 111, 1, 0, 3, 36, 1, 73, 1, 0, 2, 36, 1, 111, 1, 0, 4, 153, 1, 36, 1, 0, 7, 36, 1, 111, 1, 0, 1, 73, 1, 197, 2, 255, 1, 197, 5, 153, 1, 0, 1, 36, 1, 111, 1, 197, 1, 153, 1, 0, 2, 153, 1, 36, 1, 0, 3, 197, 1, 0, 2, 36, 1, 153, 1, 73, 1, 111, 1, 0, 2, 36, 1, 153, 1, 0, 3, 73, 1, 111, 1, 0, 4, 36, 1, 111, 1, 0, 2, 73, 1, 197, 1, 36, 1, 0, 2, 197, 1, 0, 5, 36, 1, 111, 1, 0, 4, 153, 1, 197, 1, 153, 1, 73, 1, 0, 5, 36, 1, 111, 1, 0, 4, 36, 1, 197, 2, 153, 1, 36, 1, 0, 4, 36, 1, 111, 1, 0, 2, 36, 1, 197, 1, 153, 1, 36, 1, 0, 1, 36, 1, 197, 1, 153, 1, 0, 2, 197, 2, 36, 2, 197, 1, 111, 1, 36, 1, 0, 5, 73, 1, 111, 1, 0, 30, };
UINT8 _15117732_20[] = {
0, 65, 153, 1, 0, 3, 153, 1, 36, 1, 0, 9, 153, 1, 0, 3, 153, 1, 36, 1, 0, 6, 36, 1, 0, 2, 153, 1, 0, 3, 153, 1, 36, 1, 0, 2, 36, 2, 0, 2, 197, 1, 0, 2, 153, 1, 0, 3, 153, 1, 36, 1, 0, 1, 73, 1, 197, 1, 36, 1, 0, 2, 197, 1, 0, 2, 197, 3, 111, 1, 153, 1, 36, 1, 153, 2, 0, 4, 197, 1, 0, 2, 153, 1, 0, 3, 153, 1, 197, 1, 36, 1, 0, 5, 197, 1, 0, 2, 153, 1, 0, 3, 153, 1, 36, 1, 0, 6, 197, 1, 0, 2, 153, 1, 0, 3, 153, 1, 36, 1, 0, 6, 197, 1, 0, 2, 153, 1, 0, 3, 153, 1, 36, 1, 0, 6, 197, 1, 0, 2, 153, 1, 0, 3, 153, 1, 36, 1, 0, 3, 197, 1, 0, 2, 197, 1, 0, 2, 153, 1, 0, 1, 73, 1, 36, 1, 153, 1, 36, 1, 0, 3, 197, 1, 0, 2, 197, 1, 111, 1, 153, 1, 197, 2, 111, 1, 36, 1, 153, 1, 36, 1, 0, 2, 73, 1, 153, 1, 36, 1, 197, 1, 111, 1, 36, 1, 0, 5, 36, 1, 255, 1, 197, 3, 36, 1, 0, 45, };
UINT8 _15177100_20[] = {
0, 62, 111, 1, 153, 10, 73, 1, 0, 3, 197, 1, 0, 4, 111, 1, 36, 1, 0, 3, 73, 1, 111, 1, 0, 3, 197, 1, 0, 4, 111, 1, 36, 1, 0, 3, 73, 1, 111, 1, 0, 3, 197, 1, 153, 4, 197, 1, 153, 4, 197, 1, 111, 1, 0, 3, 197, 1, 0, 4, 111, 1, 36, 1, 0, 3, 73, 1, 111, 1, 0, 3, 197, 1, 0, 4, 111, 1, 36, 1, 0, 3, 73, 1, 111, 1, 0, 3, 197, 5, 255, 1, 197, 4, 255, 1, 111, 1, 0, 6, 36, 1, 197, 1, 0, 1, 73, 1, 153, 1, 0, 9, 153, 2, 0, 3, 36, 1, 197, 1, 73, 1, 0, 5, 111, 1, 197, 1, 111, 1, 153, 1, 0, 4, 111, 2, 197, 1, 111, 1, 36, 1, 0, 1, 197, 1, 73, 1, 0, 1, 36, 1, 153, 1, 0, 4, 197, 1, 0, 2, 73, 2, 0, 4, 153, 1, 73, 1, 0, 4, 197, 1, 0, 7, 153, 2, 0, 5, 197, 1, 0, 6, 153, 1, 111, 1, 0, 6, 197, 1, 0, 34, };
UINT8 _15302784_20[] = {
0, 61, 36, 1, 153, 1, 0, 3, 111, 1, 153, 6, 36, 1, 0, 3, 111, 2, 0, 2, 153, 1, 0, 5, 153, 1, 36, 1, 0, 4, 153, 1, 0, 2, 153, 1, 0, 5, 153, 1, 36, 1, 0, 7, 197, 1, 153, 5, 197, 1, 36, 1, 0, 7, 153, 1, 0, 5, 153, 1, 36, 1, 0, 1, 36, 1, 197, 2, 73, 1, 0, 2, 197, 1, 153, 5, 197, 1, 36, 1, 0, 3, 111, 1, 73, 1, 0, 2, 153, 1, 0, 6, 73, 1, 0, 3, 111, 1, 73, 1, 0, 2, 153, 1, 0, 1, 111, 1, 153, 1, 0, 2, 153, 2, 0, 3, 111, 1, 73, 1, 0, 2, 153, 1, 0, 2, 73, 1, 197, 2, 36, 1, 0, 4, 111, 1, 73, 1, 0, 2, 153, 1, 0, 1, 73, 1, 153, 1, 36, 1, 197, 1, 73, 1, 0, 4, 111, 1, 73, 1, 0, 2, 255, 1, 197, 1, 73, 1, 0, 3, 197, 1, 153, 1, 0, 3, 153, 1, 73, 1, 0, 2, 36, 1, 0, 6, 111, 1, 0, 2, 111, 2, 153, 1, 111, 1, 0, 10, 36, 1, 153, 1, 0, 2, 36, 1, 153, 1, 197, 8, 153, 1, 0, 30, };
UINT8 _15307950_20[] = {
0, 62, 153, 1, 36, 1, 0, 6, 111, 1, 73, 1, 0, 5, 153, 1, 0, 2, 153, 2, 111, 1, 36, 1, 153, 1, 197, 2, 153, 1, 111, 1, 0, 2, 73, 1, 197, 1, 153, 1, 111, 1, 0, 1, 36, 1, 153, 1, 0, 2, 111, 1, 73, 1, 0, 1, 153, 1, 0, 2, 153, 1, 0, 4, 153, 1, 36, 1, 153, 2, 197, 2, 153, 1, 197, 1, 111, 1, 73, 1, 197, 1, 153, 2, 36, 2, 153, 1, 0, 3, 111, 1, 73, 1, 0, 1, 153, 1, 0, 3, 153, 1, 0, 2, 153, 1, 36, 1, 0, 1, 36, 1, 153, 1, 197, 2, 153, 1, 197, 1, 0, 3, 153, 1, 0, 2, 255, 1, 153, 1, 111, 1, 0, 2, 111, 1, 73, 1, 0, 3, 36, 1, 153, 1, 197, 1, 153, 1, 111, 1, 0, 1, 36, 1, 111, 2, 153, 1, 197, 2, 153, 2, 0, 3, 153, 1, 0, 2, 73, 1, 36, 1, 111, 1, 0, 2, 111, 1, 73, 1, 0, 5, 153, 1, 0, 2, 153, 1, 73, 1, 36, 1, 153, 2, 197, 2, 153, 2, 36, 1, 0, 2, 153, 1, 0, 1, 73, 1, 111, 1, 197, 1, 0, 3, 111, 1, 73, 1, 0, 5, 153, 2, 73, 1, 36, 1, 153, 2, 0, 2, 73, 1, 36, 1, 0, 5, 197, 1, 73, 1, 0, 1, 111, 1, 0, 1, 36, 1, 153, 1, 197, 5, 153, 1, 0, 4, 111, 1, 36, 1, 0, 39, };
UINT8 _15310242_20[] = {
0, 61, 197, 13, 153, 1, 0, 7, 197, 1, 0, 13, 73, 1, 111, 1, 0, 8, 73, 1, 197, 4, 255, 1, 197, 6, 153, 1, 0, 2, 73, 1, 111, 1, 0, 2, 197, 1, 0, 3, 73, 2, 0, 2, 153, 1, 0, 2, 73, 1, 111, 1, 0, 2, 197, 1, 0, 3, 73, 2, 0, 2, 153, 1, 0, 2, 73, 1, 111, 1, 0, 2, 197, 1, 153, 3, 197, 1, 73, 1, 0, 2, 153, 1, 0, 2, 73, 1, 111, 1, 0, 2, 197, 1, 0, 3, 73, 2, 0, 2, 153, 1, 0, 2, 73, 1, 111, 1, 0, 2, 197, 1, 0, 3, 73, 2, 0, 2, 153, 1, 0, 2, 73, 1, 111, 1, 0, 2, 197, 1, 153, 3, 197, 1, 73, 1, 0, 2, 153, 1, 0, 2, 73, 1, 111, 1, 0, 2, 197, 1, 0, 3, 73, 2, 0, 2, 153, 1, 0, 2, 73, 1, 111, 1, 0, 2, 197, 1, 0, 3, 73, 2, 0, 2, 153, 1, 0, 2, 73, 1, 255, 1, 197, 2, 255, 1, 197, 3, 255, 2, 197, 3, 0, 2, 73, 1, 111, 1, 0, 10, 153, 1, 0, 31, };
LATTICE lattice_array1[] = {
        {39, 3, _39_20},
        {67, 10, _67_20},
        {69, 8, _69_20},
        {83, 8, _83_20},
        {15042490, 15, _15042490_20},
        {15109257, 15, _15109257_20},
        {15117732, 15, _15117732_20},
        {15177100, 15, _15177100_20},
        {15302784, 15, _15302784_20},
        {15307950, 15, _15307950_20},
        {15310242, 15, _15310242_20},
};
// extern FONT_INFO MyFontArray1;
FONT_INFO MyFontArray1 ={
    20,
    11,
    lattice_array1
};
//===================UTF-8 汉字 字模 end================================================
//========= Add for UTF-8 Chinese char ==============
//Funciton Name: get_lattice
//Input:
//Output:
//Description: 获得utf8汉字点阵字模
LATTICE* get_lattice(FONT_INFO* font, UINT32 utf8_code)
{
	INTN first = 0;
	INTN last = font->count - 1;
	INTN middle = (first + last) / 2;
	while (first <= last)
	{
		if (font->lattice_array[middle].utf8_code < utf8_code)
			first = middle + 1;
		else if (font->lattice_array[middle].utf8_code == utf8_code)
		{
			return &font->lattice_array[middle];
		}
		else
		{
			last = middle - 1;
		}
		middle = (first + last) / 2;
	}
	return 0;
}

//Funciton Name: draw_lattice
//Input:
//Output:
//Description:
VOID draw_lattice(UINTN x, UINTN y, UINT8 width, UINT8 height, UINT8* p_data, EFI_GRAPHICS_OUTPUT_BLT_PIXEL *font_color)
{
	// unsigned int r, g, b, rgb;
	UINT8 blk_value = *p_data++;
	UINT8 blk_cnt = *p_data++;
  UINT8 x_, y_;
  
	for (y_ = 0; y_ < height; y_++)
	{
		for (x_ = 0; x_ < width; x_++)
		{
			if(blk_value)
        putpixel((x + (UINTN)x_), (y + (UINTN)y_), font_color);
      
			if (--blk_cnt == 0)
			{//reload new block
				blk_value = *p_data++;
				blk_cnt = *p_data++;
			}
		}
	}
}

//Funciton Name: draw_single_char
//Input:
//Output:
//Description:
UINT8 draw_single_char(UINT32 utf8_code, UINTN x, UINTN y, FONT_INFO* font, EFI_GRAPHICS_OUTPUT_BLT_PIXEL *font_color)
{
  LATTICE *p_lattice;
  // unsigned int error_color = 0xFFFFFFFF;
	if (font)
	{
		p_lattice = get_lattice(font, utf8_code);
		if (p_lattice)
		{
			draw_lattice(x, y, p_lattice->width, font->height, p_lattice->pixel_gray_array, font_color);
			return p_lattice->width;
		}
	}
	else
	{
    return 0;
  }
}

VOID draw_string(UINT8 *str, UINTN x, UINTN y, FONT_INFO *font, EFI_GRAPHICS_OUTPUT_BLT_PIXEL *font_color)
{
  UINT8 temp;
  UINT8 *ptr;
  // UINT32 i;
  UINT32 char_utf8;
  UINTN cur_x;
  ptr = (UINT8 *)str;
  cur_x = x;
  while('\0' != *ptr)
  {
    //1 get utf-8 code from str
    temp = ptr[0];
    if(temp > 128) //汉字
    {
      char_utf8 = (((UINT32)ptr[0]) << 16) + (((UINT32)ptr[1]) << 8) + (UINT32)ptr[2];
	    // char_utf8 = (((UINT32)ptr[0]) * 256 *256) + (((UINT32)ptr[1]) *256) + (UINT32)ptr[2];
      ptr += 3;
    }
    else
    {
      char_utf8 = (UINT32)ptr[0];
      ptr += 1;
    }
    //2 display a char
    cur_x += (UINTN)draw_single_char(char_utf8, cur_x, y, font, font_color);
  }
    
}

//在单色的背景上显示透明字符串
VOID draw_string_alpha(UINT8 *str, UINTN x, UINTN y, FONT_INFO *font, EFI_GRAPHICS_OUTPUT_BLT_PIXEL *font_color,EFI_GRAPHICS_OUTPUT_BLT_PIXEL *bg_color,UINT16 Alpha)
{
  UINT8 temp;
  UINT8 *ptr;
  EFI_GRAPHICS_OUTPUT_BLT_PIXEL ImageOverlayArea;
  // UINT32 i;
  UINT32 char_utf8;
  UINTN cur_x;
  ptr = (UINT8 *)str;
  cur_x = x;
  while('\0' != *ptr)
  {
    //1 get utf-8 code from str
    temp = ptr[0];
    if(temp > 128) //汉字
    {
      char_utf8 = (((UINT32)ptr[0]) << 16) + (((UINT32)ptr[1]) << 8) + (UINT32)ptr[2];
	    // char_utf8 = (((UINT32)ptr[0]) * 256 *256) + (((UINT32)ptr[1]) *256) + (UINT32)ptr[2];
      ptr += 3;
    }
    else
    {
      char_utf8 = (UINT32)ptr[0];
      ptr += 1;
    }
    //2 display a char
    //Alpha混合公式如下：(A覆盖在B上) 对两段内存进行处理,选取Alpha最大分母16,便于计算 
	//                  R(C)=(1-alpha)*R(B) + alpha*R(A)
	//                  G(C)=(1-alpha)*G(B) + alpha*G(A)
	//                  B(C)=(1-alpha)*B(B) + alpha*B(A)
    ImageOverlayArea.Blue = font_color->Blue;
    ImageOverlayArea.Red = font_color->Red;
    ImageOverlayArea.Green = font_color->Green;
    ImageOverlayArea.Reserved = font_color->Reserved;
    ImageOverlayArea.Blue = (UINT8)(((16 - Alpha) * bg_color->Blue + Alpha * ImageOverlayArea.Blue) >> 4);
    ImageOverlayArea.Red = (UINT8)(((16 - Alpha) * bg_color->Red + Alpha * ImageOverlayArea.Red) >> 4);
    ImageOverlayArea.Green = (UINT8)(((16 - Alpha) * bg_color->Green + Alpha * ImageOverlayArea.Green) >> 4);
    ImageOverlayArea.Reserved = (UINT8)(((16 - Alpha) * bg_color->Reserved + Alpha * ImageOverlayArea.Reserved) >> 4);
    cur_x += (UINTN)draw_single_char(char_utf8, cur_x, y, font, &ImageOverlayArea);
  }
    
}
